package org.ch02.test00.demo07.myWork;

import org.ch02.entity.Student;

import java.lang.reflect.Array;
import java.lang.reflect.Constructor;

/**
 * 八、使用反射，创建一个学生类型的数组，存放二个学生，循环遍历输出，要求如下：
 *     1、第一个学生要求使用默认构造方法实例化并使用用 set 方法初始化对象
 *
 *     2、第二个学生要求使用下面的构造方法实例化对象
 *         Student(String name,int age,Double score)
 *
 * @author CSY
 * @date 2025 - 03 - 19
 */
public class MainTest {
    public static void main(String[] args) throws Exception {
        //反射实例化数组
        Object arr = Array.newInstance(Student.class,2);
        //获取Student的Class对象
        Class<Student> stuClazz = Student.class;
        //获取Student的默认构造方法
        Constructor<Student> stuDefaultConstructor = stuClazz.getConstructor();
        //实例化Student默认构造方法
        Student stuDefault = stuDefaultConstructor.newInstance();
        //获取Student的带参构造方法
        Constructor<Student> stuConstructor = stuClazz.getConstructor(String.class, int.class, Double.class);
        //实例化Student带参构造方法
        Student stu = stuConstructor.newInstance("zs", 18, 180.0);
        //设置数组的值
        Array.set(arr,0,stuDefault);
        Array.set(arr,1,stu);
        //循环遍历输出数组的值
        for (int i = 0;i < Array.getLength(arr);i++) {
            System.out.println(Array.get(arr,i));
        }
    }
}
